//
//  AuthViewController.swift
//  weibo1
//
//  Created by 代亚洲 on 16/4/19.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD

//    http://www.daidu.com
let WB_REDIRECT_URI = "http://www.baidu.com"
//        App Key：2002171196
let WB_APP_KEY = "2002171196"
//        App Secret：07a5a60e398940b05131871469c333a7
let WB_APP_SECRET = "07a5a60e398940b05131871469c333a7"
//    https://api.weibo.com/oauth2/authorize?client_id=\(WB_APP_KEY)&redirect_uri=\(WB_REDIRECT_URI)

class AuthViewController: UIViewController {
    
    
    override func loadView() {
        self.view = webview
        //        加载登录界面
        let urlstr = "https://api.weibo.com/oauth2/authorize?client_id=\(WB_APP_KEY)&redirect_uri=\(WB_REDIRECT_URI)"
        let url = NSURL(string: urlstr)
        let request = NSURLRequest(URL: url!)
        webview.loadRequest(request)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setUpUI()
    }
    
    func setUpUI(){
        
        self.title = "登录"
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
        
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autoFill")
    }
    // MARK: - 监听方法  关闭
    @objc private func  close(){
        
        dismissViewControllerAnimated(true, completion: nil)
//        SVProgressHUD.dismiss()
        
    }
//    填充
    @objc private func  autoFill() {
        
        // document.getElementById('userId').value='哈哈哈哈哈heihei哈';document.getElementById('passwd').value='123456'18909565563
        let jsString = "document.getElementById('userId').value='18712679808';document.getElementById('passwd').value='wanwan1211'"
        webview.stringByEvaluatingJavaScriptFromString(jsString)
        
    }
    //    懒加载一个webview控件
    private lazy var webview: UIWebView = {
        let webview = UIWebView()
        // 让当前控制器成为 webView 的代理
        webview.delegate = self
        return webview
    }()
}
// MARK: - 分类获取数据 专门用来实现 UIWebViewDelegate 的代理方法的
// 先获取code 通过code获取accessToken 通过accessToken 获取个人信息
extension AuthViewController : UIWebViewDelegate {
    
    //    在这个方法中 当webView要加载一个请求时 会调用这个方法 来询问是否要加载这个请求 方法返回false的时候就不加载 这样就加载百度界面
    
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //       取到URL 如果错误直接返回
        guard let url = request.URL else{
            
            return false
        }
        //        判断URL是不是以回调页的URL开头
        //        print(url.absoluteString)
        if url.absoluteString.hasPrefix(WB_REDIRECT_URI){
            //        判断 URL中 是否包含了 code= 这个字符串
            //            print(url.query)
            if let q = url.query where q.containsString("code="){
                //                截取拿到code= 后面的数据
                let code = q.substringFromIndex("code=".endIndex)
                
                //                print(code)
                // 通过 code 获取 accessToken
                //                loadAc·cessToken(code)
                // 控制器只需要关心是否登录成功就好了
                
                AuthViewModel.sharedViewModel.loadAccessToken(code, finished: { (isSuccess) -> () in
                    
                    if isSuccess {
                        
                        //                        关闭当前页面 跳转控制器
                        self.dismissViewControllerAnimated(false, completion: { () -> Void in})
                        
//                  let appdelete = UIApplication.sharedApplication().delegate as? AppDelegate
//                        
//                        appdelete?.window?.rootViewController = WelcomeViewController()
//                      
                        NSNotificationCenter.defaultCenter().postNotificationName(ChangeRootVCNotification, object: nil)
                        
                        
                        print("登陆成功")
                    }else {
                        // 给出一个友好的提示
                        print("登录失败")
                    }
                    
                })
                
                return false
            }
            
        }
        return true
    }
    
    /*
    
    ////    加载 accessToken
    //    private func loadAccessToken(code : String){
    ////        请求地址
    //        let urlstring = "https://api.weibo.com/oauth2/access_token"
    //
    //
    ////       json  有这些数据才能获得 accessToken
    //        let params = [
    //            "client_id": WB_APP_KEY,//申请应用时分配的AppKey。
    //            "client_secret": WB_APP_SECRET,//申请应用时分配的AppSecret
    //            "grant_type": "authorization_code",//请求的类型，填写authorization_code
    //            "code": code,//调用authorize获得的code值。
    //            "redirect_uri": WB_REDIRECT_URI//回调地址，需需与注册应用里的回调地址一致
    //        ]
    ////        post请求
    //        NetWorkToolsAFN .sharedTolls.request(RequestMethod.Post, url: urlstring, parameters: params) { (responseObject, error) -> () in
    //
    //            if error != nil {
    ////                print("-----%@--------",error)
    //                return
    //            }
    //
    ////            print("-----------------------------请求成功：\(responseObject)")
    //            // 在公司里面开发的话，如果数据是字典，尽量要把其转成模型去使用
    //            // 如果 as 是写在 if let 或者 guard 里面，都使用 as?
    //            guard let dic = responseObject as? [String : AnyObject] else{
    ////                    print("----------------------------后台数据不对")
    //                    return
    //            }
    ////            字典转模型
    //            let accont = HMUserAccount(dict: dic)
    //
    //            // accessToken 获取到了，获取个人信息  因为在闭包里面所以要用self
    //            self.loadUserInfo(accont)
    //        }
    //    }
    ////    个人信息
    //    private func loadUserInfo(accont : HMUserAccount){
    //
    ////        获取地址
    //        let  urlstr = "https://api.weibo.com/2/users/show.json"
    ////        转成功才合并  有着两个数据才能返回 个人信息
    //        let params = [
    //            "access_token" : accont.access_token ?? "",
    //            "uid" : accont.uid ?? ""
    //        ]
    ////        发送请求
    //        NetWorkToolsAFN.sharedTolls.request(RequestMethod.Get, url: urlstr, parameters: params) { (responseObject, error) -> () in
    //
    //            if error != nil {
    ////                第三框架 网络错误提示框
    //                SVProgressHUD.showErrorWithStatus("网络错误")
    //                return
    //            }
    //
    ////            判断返回的数据是不是字典
    //            // 在公司里面开发的话，如果数据是字典，尽量要把其转成模型去使用
    //            // 如果 as 是写在 if let 或者 guard 里面，都使用 as?
    //            guard let dic = responseObject as? [String : AnyObject] else{
    ////                print("---------------------后台数据不对")
    //                return
    //            }
    ////            赋值用户信息
    //
    //            accont.name = dic["name"]as? String
    //            accont.avatar_large = dic["avatar_large"]as? String
    //
    ////            print("-------------------%@",accont)
    //
    ////            保存数据
    //            self.saveAccont(accont)
    //        }
    //    }
    //
    ////    保存数据信息
    //
    //    private func saveAccont(accont : HMUserAccount){
    //
    //        // 归档的路径 ： document路径 + 文件名  存储文件的路径
    //           let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
    //
    ////           print("----------------------------%@",path)
    ////        归档  把文件存储到path的这个路径中
    //        NSKeyedArchiver.archiveRootObject(accont, toFile: path)
    //    }
    //
    ////    读档  读取沙盒中保存的数据
    //    private func accountInSanbox()->HMUserAccount?{
    ////        读档的路径
    //        let path = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("account.archive")
    ////        读取的文件    要转成 HMUserAccount
    //        let reuset = NSKeyedUnarchiver.unarchiveObjectWithFile(path) as?
    //          HMUserAccount
    //
    //        return reuset
    //    }
    
    */
    
    // 开始加载
    func webViewDidStartLoad(webView: UIWebView) {
        // 显示loading
        SVProgressHUD.show()
    }
    
    // 结束
    func webViewDidFinishLoad(webView: UIWebView) {
        SVProgressHUD.dismiss()
    }
    
}

